Gráficos Interativos em R (Parte 1)
Gráficos Interativos em R (Parte 1)
1 Qual é o objetivo desse artigo?
Quando finalizamos as etapas de formatação e manipulação dos dados, podemos criar estatísticas e visualizações de dados a partir dos mesmos. Quando o assunto é análise descritiva, podemos utilizar a Visualização de Dados para entender o comportamento dos dados e idenficar padrões. Entretanto, muitos pacotes geram gráficos estáticos ou inanimados, o que pode decepcionar alguns usuários.
Em contrapartida, os gráficos interativos são criados a partir de elementos animados que aumentam a capacidade de retenção de informação através da interatividade. Sabendo disso, esse post foi escrito com o objetivo de apresentar alguns conceitos envolvendo Visualização de Dados e mostrar algumas bibliotecas do R que auxiliam na confecção de gráficos interativos.
2 Conceitos e htmlwidgets
Quando temos interesse em analisar os dados e identificar um problema de negócio, logo pensamos nas possíveis tendências e correlações que as variáveis de estudo podem ter. Para isso, muito se fala na vantagem de se criar visualizações para identificar padrões de forma rápida e direta.
Mas o que é Visualização de Dados?
E o que é um gráfico?
Isso significa que o gráfico é um desenho que tem dimensões, forma, tamanho, comprimento, área, volume, etc.
Dentro do R, existem vários pacotes que podem ser utilizados para criar visualizações estáticas e interativas. Vale lembrar que os gráficos interativos geralmente têm mais aceitabilidade dos analistas, e por conta disso, esse post mostra apenas alguns pacotes para criar visualizações desse tipo.
Dentro desse contexto, o pacote htmlwidgets foi criado para auxiliar na criação de gráficos interativos. Esse pacote funciona como um framework para embutir dentro do R as visualizações feitas em JavaScript. HTML widgets pode ser usado nos scripts em R e também ser embutido nos relatórios de R Markdown e aplicações em Shiny.
Vários pacotes já foram criados utilizando o framework, tais como:
A vantagem em se utilizar esses pacotes está em criar uma visualização interativa com apenas uma linha ou duas de código em R.
3 HighCharter
HighCharter é uma interface R que faz uso da biblioteca gráfica Highcharts http://www.highcharts.com/ construída originalmente em javascript. Com essa biblioteca é possível construir vários tipos de gráficos interativos para diferentes objetos em R.
3.1 Fazendo os Primeiros Gráficos
O pacote HighCharter permite criar gráficos utilizando duas funções diferentes:
- highchart()
- hchart()
3.1.1 highchart()
Se você está familiarizado com o pacote ggplot2, essa função é bem similar a ggplot(). Semelhantemente a essa função, diferentes argumentos podem ser utilizados na highchart() para alterar os principais elementos gráficos e mapear as variáveis.
3.1.2 hchart()
hchart() é uma função genérica para plotar diferentes gráficos de forma mais rápida para diferentes classes de objetos. Novamente comparando com o ggplot2, essa função é similar a qplot(). Para saber quais são os métodos suportados da função, basta utilizar o comando methods(hchart).
methods(hchart)## [1] hchart.acf* hchart.character* hchart.data.frame*
## [4] hchart.data_frame* hchart.default* hchart.density*
## [7] hchart.dist* hchart.ets* hchart.factor*
## [10] hchart.forecast* hchart.glm* hchart.histogram*
## [13] hchart.igraph* hchart.matrix* hchart.mforecast*
## [16] hchart.mts* hchart.numeric* hchart.prcomp*
## [19] hchart.princomp* hchart.stl* hchart.survfit*
## [22] hchart.ts* hchart.xts*
## see '?methods' for accessing help and source code
Em resumo, hchart() será usado quando deseja-se fazer um gráfico mais rápido e highchart() quando deseja-se fazer gráficos mais complicados/robustos.
Além do comando hchart() utilizado outros comandos também podem ser utilizados, como hc_title() e hc_legend() para alterar o título e mostrar/esconder a legenda dos dados, respectivamente. Esses comandos são utilizados junto com o operador %>% do pacote magrittr.
library(magrittr)
library(highcharter)
# Carregando os dados
data(tips, package = 'reshape2')
data(diamonds, package = 'ggplot2')
# Construindo os gráficos
hchart(diamonds$price, color="#0000FF") %>% hc_title(text = "Histograma")hchart(tips$sex) %>% hc_title(text = "Gráfico de Barras") %>% hc_legend(enabled = F)hchart(AirPassengers) %>% hc_title(text = "Série Temporal") %>% hc_legend(enabled = F)3.2 Gráfico de Linhas
highchart() %>%
hc_add_series(data = women$weight) %>%
hc_add_series(data = women$height)Como padrão, highchart() assume como padrão um gráfico de linhas. Ele também assume nome padrão para a série dos dados (i.e. Series 1, Series 2, etc). Mas também é possível alterar o nome da série(name), cor (color), entre outros.
highchart() %>%
hc_add_series(data = head(diamonds$depth,30), name = "depth", color = "red") %>%
hc_add_series(data = head(diamonds$price,30), name = "price", color = "blue")data(citytemp)
hc <- highchart() %>%
hc_plotOptions(line = list(color = "blue",
marker = list(
fillColor = "white",
lineWidth = 2,
lineColor = NULL
)
)) %>%
hc_add_series(name = "Tokyo", data = citytemp$tokyo) %>%
hc_add_series(name = "London", data = citytemp$london,
marker = list(fillColor = "black"))
hc %>%
hc_add_series(name = "New York",
data = citytemp$new_york,
color = "red")3.3 Gráfico de Densidade
highchart() %>%
hc_add_series(data = density(rnorm(300)),
type = "area",
color = "white",
fillColor = "rgba(0,0,255,0.3)",
marker = list(lineColor = "red",
lineWidth = 2,
fillColor = "white")) %>%
hc_legend(enabled = F)3.4 Gráfico de Barras
highchart() %>%
hc_chart(type ="column") %>%
hc_xAxis(categories = levels(tips$day)) %>%
hc_add_series(data = tapply(tips$total_bill,tips$day,sum))3.5 Gráfico de Dispersão
hchart(tips, type="scatter",hcaes(x="total_bill", y="tip")) %>% hc_title(text = "Gráfico de Dispersão")hchart(tips, type="scatter",hcaes(x="total_bill", y="tip", group="day")) %>% hc_title(text = "Gráfico de Dispersão por Grupo")3.6 Gráfico de Setores
highchart() %>%
hc_chart(type = "pie") %>%
hc_add_series_labels_values(labels = levels(tips$day), values = tapply(tips$total_bill,tips$day,sum)) %>%
hc_tooltip(pointFormat = paste('{point.y}<br/><b>{point.percentage:.1f}%</b>'),enabled= TRUE)3.7 Gráfico de Candlestick
library(quantmod) # Pacote para carregar os dados do mercado financeiro
x <- getSymbols("IBM", auto.assign = FALSE)
x <- hchart(x)
x3.8 Mapa
Para gerar o mapa do Brasil, foram utilizadas as estimativas do total da população das Unidades da Federação brasileiras disponibilizadas pelo IBGE (Instituto Brasileiro de Geografia e Estatística) no link Dados IBGE.
#options(encoding="UTF-8")
map <- get_data_from_map(download_map_data("countries/br/br-all"))
map2 <- download_map_data("countries/br/br-all")
# str(map)
## Carregando a base de dados formatada e baixada do site do IBGE
xls <- readxl::read_xls(path = "estimativa_TCU_2018_20190213.xls",
sheet = 1,
range = "A1:B28")
colnames(xls) <- c("Estado","Populacao")
library(magrittr)
library(dplyr)
dados <- map[,c("woe-name","hc-a2")] %>% left_join(x=.,y=xls, by = c("woe-name" = "Estado"))
# print(dados, n = Inf)
hcmap(map="countries/br/br-all",
name = "Brasil",
data = dados,
value = "Populacao",
joinBy = "hc-a2",
dataLabels = list(enabled = TRUE, format = '{point.hc-a2}'))data(unemployment)
hcmap("countries/us/us-all-all", data = unemployment,
name = "Unemployment", value = "value", joinBy = c("hc-key", "code"),
borderColor = "transparent") %>%
hc_colorAxis(dataClasses = color_classes(c(seq(0, 10, by = 2), 50))) %>%
hc_legend(layout = "vertical", align = "right",
floating = TRUE, valueDecimals = 0, valueSuffix = "%")4 Conclusão
Esse texto teve como objetivo apresentar alguns conceitos envolvendo Visualização de Dados, mostrar alguns comandos da biblioteca gráfica Highcharter do R e para fins de registro pessoal. Esse post não teve como objetivo mostrar todas as funções do pacote, mas mostrar as principais funcionalidades dele. Caso tenha interesse em aprender mais sobre a criação de gráficos interativos, consulte o post Gráficos Interativos em R (Parte 2).
Obrigado por ter lido.